#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>


int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        int cnt=5;
        while(cnt--)
        {
            printf("I am child,pid:%d,ppid:%d\n",getpid(),getppid());
            sleep(1);
        }
        exit(0);
    }
    
    //sleep(7);
    int status = 0;
    while(1)
    {
        pid_t rid = waitpid(id,&status,WNOHANG);
        if(rid > 0)
        {
            printf("wait success.rid:%d\n",rid);
            if(WIFEXITED(status))
            {
                printf("father quit. status:%d, child quit_code:%d\n",status,WEXITSTATUS(status));
            }
            else
            {
                printf("child quit unnormal\n");
            }
            break;
        }
        else if(rid < 0)
        {
            printf("wait failed,rid:%d\n",rid);
        }
        else
        {
            printf("child process running\n");
            //DOOtherthing();
        }
        sleep(1);
    }
    return 0;
}


//int main()
//{
//    printf("I am process,pid:%d,ppid:%d",getpid(),getppid());
//    sleep(3);
//    _exit(0);
//    return 0;
//}

//enum  
//{
//    Sucessful=0,
//    Div_Zero,
//    
//};
//
//int exit_code=0;
//int Div(int x,int y)
//{ 
//    if(y == 0)
//    {
//        exit_code = 1;
//        return -1;
//    }
//    else
//    {
//        return x/y;
//    }
 // return x/y;
//}
//const char* Strerror(int exit_code)
//{
//    switch(exit_code)
//    {
//        case Sucessful:
//            return" Sucessful";
//        case Div_Zero:
//            return "Div_Zero";
//        default:
//            return "unknow";
//
//    }
//}
//int main()
//{
////    int res = Div(10,100);
////    printf("result:%d [%s]\n",res,Strerror(exit_code));
////    res = Div(10,0);
////    printf("result:%d [%s]\n",res,Strerror(exit_code));
//    //for(int errornum=0; errornum<200; errornum++)
//    //{
//    //    printf("%d:%s\n",errornum,strerror(errornum));
//    //}
//    // printf("I am process.pid:%d,ppid:%d\n",getpid(),getppid());
//    printf("I am process. pid:%d\n",getpid());
//    int* p = NULL;
//    *p = 100;
//    return 0;
//}
